***********
NX-Trimmer (v0.4)
***********
Elaborado por JulesOnTheRoad para elotrolado.net
https://github.com/julesontheroad/NX-Trimmer
---------------
0. Changelog
---------------
v0.4   - Limpiados echos, dando al usuario un mejor entendimiento del proceso
         Aadida compatibilidad con XCI_BatchBuilder.
         Eliminado auto-exit al final del programa para que pueda ser usado por lnea de comandos.
	 Realizados un par de arreglos en el cdigo.

v0.3.1 - Reformada carpeta ztools para eliminar sfk.exe ya que no era necesario. Aadida la build de Bigjokker de hacbuild para eliminar la advertencia de falta de 
REV2     header_key.txt en hacbuild, ya que esta clave no es realmente necesaria. 
         Se ha vuelto a la anterior build de hactool en lugar de la prebuild publicada por SciresM ya que pareca dar problemas a usuarios de sistemas 32bits.
	 En caso de necesitar la build de SciresM https://github.com/SciresM/hactool/releases/tag/1.2.0

v0.3.1 - Aadidas opciones en el header del archivo .bat. Editar con notepad++ para seleccionarlas.
   I - "preservemanual" Por defecto a 0, poner a 1 si se quiere que no se borre el nca del manual. De hacerlo el programa lo dejar en la carpeta output junto al xci
	El xci resultante no contendr el manual. 
	NOTA: Nota NO INSTALAR EL .nca del manual!! ya que dar error en caso de intentar acceder al manual del juego.
	NOTA2: El xci sin el manual es completamente funcional y si se selecciona el manual no pasa nada
	NOTA3: Opcin pensada para compatibilidad con un futuro constructor de nsp.
   II - "delete_brack_tags" Eliminacin de tags [] del tipo [trimmed]- Por defecto a 1
  III - "delete_pa_tags" Eliminacin de tags () del tipo (USA) - Por defecto a 0. De activarla puede que borre tambin las tags []
v0.3.0 - Realizados bastantes cambios desde la versin inicial. Los cules se detallan a continuacin:
   I - Aadida compatibilidad con juegos con ms de 5 nca. Estos se dividen en dos casos, los cules se detallan a continuacin.
       a) Juegos con manual en html (5 nca). En estos se ha decidido eliminar el manual del juego, lo cul no impide su ejecucin. 
	  El intento de acceder al manual desde los juegos que lo incluyen resulta en una accin que no da lugar a ningn 
	  resultado. Los juegos probados pueden jugarse perfectamente sin manual.
       b) Juegos rev con actualizaciones o incluso dlcs. En estos juegos se ha decidido eliminar las actualizaciones y dlcs del xci.
	  Adicionalmente se crean nsps con las actualizaciones o dlcs correspondientes. Para esta funcin es necesario tener instalado
	  Python en el ordenador.
   II - La ruta de salida se ha movido ha la carpeta "output_nxt" para tenerlo todo ms organizado y de cara a que se pueda tener NX-Trimmer
	en la misma carpeta que XCI_Builder, el usar "output_xb" como salida.
   III - Reformado de carpeta ztools, eliminando aplicaciones. 
   IV - Actualizacin de hacbuild.exe para corregir el warning por falta de "xci_header_key", la cul no es necesaria para completar el
	proceso pero ahora se puede incorporar rellenando el archivo "header_key.txt" en ztools.
   V  - Aadida plantilla para keys.txt en la carpeta ztools
   VI - Aadido sistema de cdigos para la salida de los ficheros. Este consiste en lo siguiente:
	a) Se eliminan las tags [] de los ficheros. Para eliminar cosas como trimmed.
        b) Se eliminan los caracteres _ (ms que nada porque no me gusta como quedan)
	c) Se aade las siguientes tags a la salida.
	   [nxt] xci trimeado con NX-Trimmer
	   [nm] "no manual", es decir se ha eliminado el manual para hacer funcionar el xci.
	   [c1][c2]... En nsp de salida: nmero de orden del contenido adicional incluido en el xci. (Actualizaciones, dlcs ...)
	   [dlc] En nsp de salida significa que el contenido es un dlc
	   [upd] En nsp de salida significa que el contenido es una actualizacin
	d) Los dlc de salida son ticketless, deberan ir cifrados con la clave de cartucho y ser solo funcionales con SX OS. Para
           hacerlos funcionales habra que aadir un ticket falso como hace 4XCI, lo cul no es mi objetivo actual.
	e) Las actualizaciones usan common tickets firmados por Nintendo, deberan de ser funcionales con cualquier FW.
  VII - Se elimina el contenido de la particin "normal" ya que est pensada en caso de que cambie el contenido del nca "meta" y el nca "control"
	en revisiones de cartuchos, a da de hoy estos se incluyen tambin en secure y no es necesaria la copia en "normal". Los cartuchos
	card2 llevan normal vaco por este motivo.
	Dependiendo de las revisiones que introduzcan los futuros card3 puede ser necesario actualizar el programa.
 VIII - Mejor uso de hactool, extrayendo nicamente el contenido de la particin secure.

NOTA: Si se viene de una versin anterior sustituir las aplicaciones de ztools. Se ha actualizado hactool y se ha realizado una pequea 
      modificacin en hacbuild.

v0.2.x - Versiones de desarrollo
v0.1.0 - Lanzamiento inicial

---------------
1. Descripcin
---------------
Esta herramienta est pensada para limpiar la particin update y limpiar el padding en archivos xci.
Esta herramienta est diseada en cdigo batch sirviendo de interfaz de intercambio entre los siguientes programas:
a.) hacbuild: Programa para creacin de archivos xci mediante archivos nca. Diseado por LucaFraga
https://github.com/LucaFraga/hacbuild
b.) hactool: Programa cuya funcin es mostrar la informacin, desencriptar y extraer diversos tipos de archivos de datos de Nintendo Switch.
Hactool ha sido diseado por SciresM
https://github.com/SciresM/hactool
c.) nspBuild: Programa destinado a la creacin de archivos nsp a partir de archivos nca. 
nspBuild ha sido diseado por CVFireDragon
https://github.com/CVFireDragon/nspBuild
Aplicacin inspirada en "A Simple XCI, NCA, NSP Extracting Batch file (Just Drag and Drop) with Titlekey decrypt"
creada por Bigjokker y publicada en gbatemp:
https://gbatemp.net/threads/a-simple-xci-nca-nsp-extracting-batch-file-just-drag-and-drop-with-titlekey-decrypt.513300/
---------------
2. Requisitos
---------------
- Es necesario emplear un ordenador con sistema operativo windows.
- Es necesario disponer de un archivo keys.txt con las claves necesarias para el funcionamiento de hactool.
- Es necesario tener Python instalado para el funcionamiento de nspbuild
- Es necesario tener instalado al menos net frameworks 4.5.2 para el funcionamiento de hactool.
---------------
3. Funciones
---------------
- Eliminacin de padding, vaciado de particiones, update y normal y eliminacin de particin logo.
- Se reconstruyen los cartuchos como "card1"
- Se separan actualizaciones y dlc de los cartuchos rev.
- Se elimina manual de los cartuchos que lo incluyen (minora) sin perder su funcionalidad.
- Obtencin de archivos "game_info" de los juegos.
---------------
4. Limitaciones
---------------
- Actualmente los archivos xci solo funcionan en SX OS
- Debido a un fallo en el diseo de hacbuild no compatible con la construccin de archivos con ms de 5nca.
  Una vez actualizado XCI_Builder para incluir las soluciones de NX-Trimmer se continuar investigando.
  El motivo parece ser algn parmetro no documentado de la cabecera del cartucho que dentifica el nmero de archivos nca de la
  particin secure. Como la mayora de los XCI usan 4nca es posible que se haya asumido como valor fijo.
  Para su identificacin es necesario reformar hacbuild para que respete el padding de los cartuchos y el orden de construccin en
  las particiones.
- Para los archivos con 5nca es necesario eliminar el manual
- Para los archivos rev es necesario extraer las actualizaciones y dlcs en archivos nsp.
- Actualmente el programa no es capaz de identificar la versin de las actualizaciones.
 (No estoy seguro de que sea posible mediante hactool sin extraer los nca y aumentar el tiempo de procesamiento)
- El tiempo de procesado de los juegos de ms de 4gb es en proporcin ms lento debido al fix empleado en hacbuild para darles compatibilidad.
 (Podra ser interesante investigar si existe una forma mejor de procesarlos)
- El smbolo "!" da fallo al ser pasado a hacbuild. Evitad usarlo de momento en el nombre de los ficheros.
-----------------------
5. Uso de la aplicacin
-----------------------
I.-   Para el correcto funcionamiento de la aplicacin rellenar el archivo "keys.txt" en la carpeta ztools.
      Ms informacin: https://github.com/SciresM/hactool
II.-  Opcionalmente rellenar el archivo header_key.txt con el valor de xci_header_key para ello google es vuestro amigo.
III.- Para recortar un xci arrastrar el archivo xci sobre "NX-Trimmer_v0.3" y esperar a que se cierre
      la consola de sistema.
IV.-  Se obtendr una carpeta con el "nombre del archivo original" en output_nxt. Dentro habr un archivo xci de menor
      tamao que el original
V.-   En caso de que el cartucho incorpore actualizaciones o dlcs se aadirn a la misma carpeta
V.-   Adicionalmente se almacenar el archivo game_info.ini del juego en la carpeta "game_info"
VI.-  Cargar archivo xci en lanzador de SX OS.
VII.- Opcionalmente instalar las actualizaciones o dlcs generados.
------------------
6. Compatibilidad
------------------
Con los cambios aadidos y aceptando las limitaciones descritas este mtodo debera de ser compatible con todos los xci actuales.
Al menos yo no he encontrado incompatibilidades.
--------------------
7. Agradecimentos a: 
--------------------
LucaFraga, SciresM y CVFireDragon 
Bigjokker de gbatemp por los consejos sobre como limpiar echos en archivos batch.
A todos los miembros de gbatemp, elotrolado.net y a mis amigos de discord ;)

